package ads.corporativa.aula0204.dao.impl;

import java.util.ArrayList;
import java.util.List;

import ads.corporativa.aula0204.dao.ParticipanteDAO;
import ads.corporativa.aula0204.entity.Participante;
import ads.corporativa.aula0204.exceptions.MyException;

public class ParticipanteListDAO implements ParticipanteDAO {

	private List<Participante> participantes;

	public ParticipanteListDAO() {
		participantes = new ArrayList<>();
	}

	@Override
	public void save(Participante entity) {
		if (entity.getId() == 0) {
			entity.generateId();
			participantes.add(entity);
		} else {
			int pos = participantes.indexOf(entity);
			if (pos != -1) {
				participantes.set(pos, entity);
			}
		}
	}

	@Override
	public void delete(int id) {
		participantes.remove(find(id));
	}

	@Override
	public Participante find(int id) {
		for (Participante p : participantes) {
			if (p.getId() == id) {
				return p;
			}
		}
		throw new MyException("Não existe participante com ID " + id);
	}

	/**
	 * Retorna todos os partipantes presentes na lista
	 */
	@Override
	public List<Participante> find() {
		return participantes;
	}

	@Override
	public int count() {
		return participantes.size();
	}

	@Override
	public Participante findByCpf(String cpf) {
		for (Participante p : participantes) {
			if (p.getCpf().equals(cpf)) {
				return p;
			}
		}
		throw new MyException("Não existe participante com CPF " + cpf);
	}

	@Override
	public List<Participante> findByNome(String nome) {
		List<Participante> result = new ArrayList<>();
		for (Participante p : this.participantes) {
			if (p.getNome().contains(nome)) {
				result.add(p);
			}
		}
		if (result.isEmpty()) {
			throw new MyException("Não existe participante com nome " + nome);
		} else {
			return result;
		}
	}

}
